package ca.concordia.soen6461.wichf.controller.dsl;

import ca.concordia.soen6461.wichf.controller.Action;
import ca.concordia.soen6461.wichf.controller.Condition;
import ca.concordia.soen6461.wichf.controller.Event;
import ca.concordia.soen6461.wichf.controller.View;

public interface NavigationModelBuilder {
	
	public interface OnEvent extends ProvidedCondition {
		public ProvidedCondition provided(Condition condition);
	}
	
	public interface ProvidedCondition extends PerformAction {
		public PerformAction perform(Action action);
	}
	
	public interface PerformAction {
		public <V> NavigationEdge goTo(View<V> view);
		public NavigationEdge stay();
		public NavigationEdge goBack();
		public NavigationEdge goHome();
	}
	
	public View<?> homeView();
	
	public <V> void from(View<V> view, NavigationEdge... edges);
	
	public OnEvent on(Class<? extends Event> event);
	
	public NavigationModel getResult();
	
}
